package com.jh.fcsm.util;

/**
 * 行政区划操作 工具类
 *
 * @author szx
 * @version 1.0
 * @date 2022/2/24 9:32
 */
public class AreaCodeUtil {

    private static final String ZJ_PRO_AREA = "330000"; // 浙江省级区划
    private static final String FOUR_ZERO_SUFFIX = "0000"; // 省级后缀
    private static final String TWO_ZERO_SUFFIX = "00"; // 市级后缀

    /**
     * 是否省级
     *
     * @param code 区划代码
     * @return true 省级，false 市级或者县级
     */
    public static boolean isProvince(String code) {
        if (isEmpty(code)) return false;
        return code.endsWith(FOUR_ZERO_SUFFIX);
    }

    /**
     * 是否市级
     *
     * @param code 区划代码
     * @return true 市级 ，false 县级
     */
    public static boolean isCity(String code) {
        if (isEmpty(code)) return false;
        if (isProvince(code)) return false;
        return code.endsWith(TWO_ZERO_SUFFIX);
    }

    /**
     * 获取父级区划
     *
     * @param code 区划代码
     * @param area 区划等级 {@link AREA}
     * @return 父级区划
     */
    public static String obtainParent(String code, AREA area) {
        if (isEmpty(code)) return "";
        switch (area) {
            case PROVINCE:
                return code.substring(0, 2) + FOUR_ZERO_SUFFIX;
            case CITY:
                return code.substring(0, 4) + TWO_ZERO_SUFFIX;
            case COUNTRY:
            default:
                return code;
        }
    }

    /**
     * 是否为空
     *
     * @param code 区划代码
     * @return true - 空 false - 非空
     */
    private static boolean isEmpty(String code) {
        return code == null || "".equals(code);
    }

    /**
     * 区划枚举
     */
    public enum AREA {
        PROVINCE, CITY, COUNTRY
    }
}

